#ifndef ENTITY2D_H
#define ENTITY2D_H
#include "Structs.h"
#include "Defines.h"
#include <string>
#include "Renderer.h"
class ENGINE_API Entity2D
{
public:
	//constructor
	Entity2D ();
	//seteo nombre del objeto
	void SetName(std::string Name);
	//obtengo el nombre del objeto
	std::string &GetName (); 
	//seteo al objeto en visible o no visible
	void SetVisible (bool Visible);
	//obtengo si el objeto esta o no visible
	bool GetVisible ();
	//Seteo posicion-----------------------------------------------------------------
	void SetPos (float px, float py, float pz);
	//obtengo posicion x
	float GetPosX ();
	//obtengo posicion y
	float GetPosY ();
	//obtengo posicion z
	float GetPosZ ();
	//Seteo rotacion-----------------------------------------------------------------
	void SetRotation (float Rotation);
	//obtengo rotacion
	float GetRotation ();
	//seteo la dimension----------------------------------------------------------------
	void SetScale (float W, float H);
	//Obtengo la dimension en ancho
	float GetScaleH();
	//obtengo la dimension en Alto
	float GetScaleW();
	//seteo el angulo de giro----------------------------------------------------------------
	void SetMoveAngle (float Angle);
	//obtengo el angulo de giro
	float GetMoveAngle ();
	//seteo velocidad de movimiento-----------------------------------------------------------------
	void SetMoveSpeed (float Speed);
	//obtengo velocidad de movimiento
	float GetMoveSpeed ();
	//seteo direccion de movimiento
	void SetMovDir(D3DVECTOR vDir);
	//obtengo dir movimiento
	D3DVECTOR GetMovDir();
	//Dibujado-----------------------------------------------------------------
	virtual void Draw (Renderer * rRenderer);
	//flipeo-----------------------------------------------------------------
	void FlipX (bool opc);
	void FlipY (bool opc);
	bool FlipX ();
	bool FlipY ();
	//direccion de movimiento
	void SetDir(D3DVECTOR Dir);
	D3DVECTOR GetDir();
	//-------------------------------------------------------------------------
	enum CollisionResult
	{
		None,
		Vertical,
		Horizontal
	};
	CollisionResult CheckCollision(Entity2D* p_pEntity);
	std::string& GetCollisionGroup ();
	void SetCollisionGroup (std::string p_sColGroup);
	Entity2D::CollisionResult GetCollisionResult();
	void OnCollision(Entity2D* p_eObject);

	//-------------------------------------------------------------------------
	virtual void Update (float p_fTimeBetweenFrames);
	//---------------------------------------------------------------------------
protected: 
	//variable de visibilidad
	bool m_bVisible;
	//variables de posicion
	float m_fx,m_fy,m_fz;
	//variables de rotacion
	D3DVECTOR m_vRotation;
	//variables de nombre
	std::string m_sName;
	//escala en alto y ancho
	float m_fw,m_fh;
	//angulo de giro
	float m_fMoveAngle;
	//direccion de movimiento
	D3DVECTOR m_vDir;
	//velocidad de movimiento
	float m_fSpeed;
	//grupo de colision
	std::string m_sColGroup;
	//resultado de la colision actual
	CollisionResult CollResult;
};
#endif
